<?xml version="1.0" encoding="UTF-8"?>
<html>
    <head>
        <link type="text/css" rel="stylesheet" href="./css/template.css" />
        <link type="text/css" rel="stylesheet" href="./css/SyntaxHighlighter.css" />
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <title>Jini</title>
        <script language="javascript" src="./js/shInit.js" />
        <script language="javascript" src="./js/shCore.js" />
        <script language="javascript" src="./js/shBrushCpp.js" />
        <script language="javascript" src="./js/shBrushCSharp.js" />
        <script language="javascript" src="./js/shBrushCss.js" />
        <script language="javascript" src="./js/shBrushDelphi.js" />
        <script language="javascript" src="./js/shBrushJava.js" />
        <script language="javascript" src="./js/shBrushJScript.js" />
        <script language="javascript" src="./js/shBrushPhp.js" />
        <script language="javascript" src="./js/shBrushPython.js" />
        <script language="javascript" src="./js/shBrushRuby.js" />
        <script language="javascript" src="./js/shBrushSql.js" />
        <script language="javascript" src="./js/shBrushVb.js" />
        <script language="javascript" src="./js/shBrushXml.js" />
        <keywords>Jini,UPnP,RMI,Jini(TM) Technology Starter Kit</keywords>
        <author>Brice Gaillard</author>
    </head>
    <body>
        <div class="chapter">
            <h2>1 - Introduction</h2>
            <p>
                <i>Jini</i>
                est une technologie conçue par
                <i>Sun Microsystems</i>
                permettant de créer un réseau unique de dispositifs, applications et périphériques, facile à gérer et évolutif qui peut être distribué et est indépendant du système d’exploitation et des protocoles utilisés.
				Toute cette définition représente un des buts majeur de
                <i>Jini</i>
                qui est de fournir à un utilisateur appartenant à un groupe autorisé d’accéder à un service fournit par un objet indépendamment de l’endroit où il se situe dans le réseau.
				Un autre avantage fournit par
                <i>Jini</i>
                est de permettre d’avoir un réseau distribué, simple à administrer et dynamiquement évolutif car chaque dispositif rattaché au réseau
                <i>Jini</i>
                vient avec ses interfaces permettant de l’utiliser.
				On le compare souvent à l’UPnP (Universal Plug and Play) de Microsoft où à Salutation autre protocole soutenu par un consortium important avec notamment Adobe, Cisco, HP, IBM et bien d’autres.
            </p>
            <div class="subChapter">
                <h3>1.1 - Présentation</h3>
                <p>
                    La technologie
                    <i>Jini</i>
                    propose une architecture permettant de regrouper des dispositifs dans un environnement distribués afin qu’ils proposent leurs services à des utilisateurs où à d’autres dispositifs. Les dispositifs, qui peuvent être des applications, des périphériques ou les deux, sont regroupés en fédération de services et proposent leur service à travers leur interface.
					Chaque dispositif qui se connecte au réseau
                    <i>Jini</i>
                    apporte son interface pour assurer fiabilité et compatibilité et se propage à travers le réseau grâce au protocole RMI (Remote Method Invocation). Les objets se déplacent entre machines virtuelles donc tous les dispositifs capables d’intégrer une JVM et un processeur pour les calculs peuvent faire partie d’un système
                    <i>Jini</i>
                    . Il existe une exception ou les dispositifs peuvent ne pas avoir de JVM ou de processeurs dans ce cas, ils sont contrôlés par un autre dispositif. C’est pour cela que dans les dispositifs, on peut trouver imprimantes, logiciels, cellulaires, ou bien même une cafetière ou un lave-linge. On peut très bien utiliser
                    <i>Jini</i>
                    pour contrôler un réseau domotique sans aucun ordinateur.
					Le système
                    <i>Jini</i>
                    consomme beaucoup de puissance processeur donc en général, on considère que la bande passante est très élevée.
                </p>
            </div>
        </div>
        <div class="chapter">
            <h2>
                2 - Architecture
                <i>Jini</i>
            </h2>
            <p>
                L’architecture
                <i>Jini</i>
                est une spécification de
                <i>Sun Microsystems</i>
                permettant de créer un système unique en environnement distribué. La technologie
                <i>Jini</i>
                offre un moyen pour découvrir, localiser, utiliser les services de façon sur et optimisés.
            </p>
            <div class="subChapter">
                <h3>2.1 - Principaux concepts</h3>
                <h4>2.1.1 - Service</h4>
                <p>
                    Le service est la notion la plus importante de l’architecture
                    <i>Jini</i>
                    . Le service désigne à la fois une entité et la fonction qu’elle propose. C’est un terme générique car un périphérique peut fournir plusieurs services et un service peut être fourni par plusieurs périphériques et/où logiciels.
					En clair un service représente le traitement qu’une entité propose pour ses clients. Un client peut être un utilisateur, un programme ou bien un autre service. Comme exemple de service, on peut prendre imprimer pour une imprimante ou stocker des données pour un disque dur. Une caméra peut fournir le service prendre une vidéo mais aussi prendre une photo.
                </p>
                <h4>2.1.2 - Lookup</h4>
                <p>
                    Le Lookup service est une pièce importante du système
                    <i>Jini</i>
                    . Il constitue le principal point de contact entre les clients et les services. Il représente un peu un proxy où les différents services se font connaître et transmettent leur interface afin de définir le moyen de communiquer avec le client. Il sert aussi aux clients à trouver les services proposés par le système
                    <i>Jini</i>
                    et de savoir lequel correspond le plus au traitement attendu.
                </p>
                <h4>2.1.3 - Leasing</h4>
                <p>L’accès aux services est limité par un système de gestion de baux (leasing) qui propose les services aux clients pour un temps limité. Chaque bail garantie l’accès au service du client et doit être renouvelé avant la fin de la durée accordée sous peine de coupure de la liaison au service.
					Ce mécanisme a été conçu pour palier à un problème qui pourrait bloquer le réseau. En effet, supposez qu’un client attende la fin du traitement d’un service pour continuer son action. Si le service se déconnecte du système sans prévenir, le client risque d’attendre indéfiniment et à la longue de saturer le réseau. Le leasing a permis de supprimer cet effet.</p>
                <h4>2.1.4 - Transaction</h4>
                <p>
                    L’architecture
                    <i>Jini</i>
                    gère le support des transactions.
					L’appel des services par un client peut être encapsulé dans une transaction et satisfaire toutes ses obligations.
                </p>
                <h4>2.1.5 - Security</h4>
                <p>
                    La sécurité dans un système
                    <i>Jini</i>
                    repose essentiellement sur deux concepts fondamentaux que sont un accès principal et une liste de contrôle d’accès. Un utilisateur accède à un service par un accès principal et ce service peut accéder aux autres services à travers les listes de contrôle d’accès de l’utilisateur appelant.
                </p>
                <h4>2.1.6 - events</h4>
                <p>
                    L’architecture
                    <i>Jini</i>
                    utilise les events pour avertir de modification au sein du système. Les services peuvent supporter les messages envoyés sous forme d’events.
                </p>
            </div>
            <div class="subChapter">
                <h3>2.2 - Couches composants</h3>
                <p>
                    L’architecture
                    <i>Jini</i>
                    utilise des composants appartenant à trois catégories, infrastructure, modèle de programmation et services. Ces catégories constituent des couches plus ou moins basses qui spécifient la création des services définis dans le réseau
                    <i>Jini</i>
                    .
					La couche infrastructure comprend un ensemble de composants de base du réseau
                    <i>Jini</i>
                    .
                </p>
                <h4>2.2.1 - Infrastructure</h4>
                <p>
                    La couche infrastructure de l’architecture
                    <i>Jini</i>
                    correspond au noyau minimal nécessaire pour mettre en place un réseau
                    <i>Jini</i>
                    . Il est constitué des services indispensables au fonctionnement du réseau.
                </p>
                <p>On trouve dans cette couche :</p>
                <p />
                <ul>
                    <li>L’intégration du protocole RMI avec le support de la plateforme de sécurité Java en environnement distribué. Il est utilisé pour la communication au sein du réseau.</li>
                    <li>
                        Le discovery/join protocole. Un protocole de l’architecture
                        <i>Jini</i>
                        qui permet aux services de découvrir et de s’enregistrer auprès du lookup service.
                    </li>
                    <li>Le lookup service qui est une sorte d’annuaire et de dépôt qui permettent aux nouveaux services de s’enregistrer pour signaler qu’ils sont disponibles ainsi que de transmettre leur interface à destination des clients.</li>
                </ul>
                <h4>2.2.2 - Modèle de programmation</h4>
                <p>
                    La couche modèle de programmation est étroitement liée à la couche infrastructure et ensemble constitue le socle de création des services.
					La couche modèle de programmation permet de définir l’ensemble des interfaces liées aux services et de les déplacer dans le réseau
                    <i>Jini</i>
                    .
                </p>
                <p>Elle est composée de trois types d’interfaces :</p>
                <p />
                <ul>
                    <li>Les interfaces de leasing, pour permettre à l’utilisateur d’allouer les ressources du service pour un temps donné renouvelable.</li>
                    <li>Les interfaces des events, pour que les services puissent émettre et recevoir des notifications et sachent les traiter.</li>
                    <li>Les interfaces de transactions, pour permettre de garder un système cohérent en protégeant le système des modifications erronées.</li>
                </ul>
                <h4>2.2.3 - Services</h4>
                <p>Les services sont la troisième couche de l’architecture et se basent sur les deux autres pour fonctionner.
					En utilisant les outils fournis par la couche infrastructure et modèle de programmation un service peut, par exemple, utiliser le discovery/join protocole pour trouver un service de lookup, utiliser les events pour s’enregistrer et dire qu’il est disponible. Il offre ensuite ses ressources au client avec le leasing.
					Les services apparaissent comme des objets avec des interfaces écrites en Java définissant les opérations que l’on peut effectuer sur ces derniers.</p>
                <p>Des exemples de services peuvent être :</p>
                <p />
                <ul>
                    <li>Les services d’impression, les services d’affichage, etc.</li>
                    <li>
                        Le
                        <i>JavaSpace</i>
                        , un service permettant la communication et le stockage d’objets dans des groupes.
                    </li>
                    <li>
                        Le
                        <i>Transaction manager</i>
                        , un service qui gère les transactions au sein du réseau
                    </li>
                    <ul />
                </ul>
            </div>
            <div class="subChapter">
                <h3>
                    2.3 - Fonctionnement d’un réseau
                    <i>Jini</i>
                </h3>
                <p>
                    Les schémas ci-dessous montrent le déroulement des deux principaux services que sont le discovery/join protocole et le lookup service. Ils aident à mieux comprendre l’architecture du système
                    <i>Jini</i>
                    .
                    <br />
                    <br />
                    Schéma Discovery
                    <br />
                    <br />
                    <img src="./images/jini_discovery.jpg" />
                    <br />
                </p>
                <p>
                    Un service qui vient d’être rajouté au réseau
                    <i>Jini</i>
                    , effectue une requête multicast à la recherche des lookup services du réseau pour s’enregistrer.
                    <br />
                    <br />
                    Schéma Join
                    <br />
                    <br />
                    <img src="./images/jini_join.jpg" />
                    <br />
                </p>
                <p>
                    Une fois que le lookup service a été trouvé, le service transfère un objet service contenant ses interfaces pour l’utiliser ainsi que ses attributs. Une copie de ses objets existe dans le lookup service.
                    <br />
                    <br />
                    Schéma Lookup
                    <br />
                    <br />
                    <img src="./images/jini_lookup.jpg" />
                    <br />
                </p>
                <p>
                    Un client qui souhaite utiliser le service, repère sur le lookup service le service qui lui correspond et télécharge en local les interfaces du service.
                    <br />
                    <br />
                    Schéma Utilisation
                    <br />
                    <br />
                    <img src="./images/jini_utilisation.jpg" />
                    <br />
                </p>
                <p>Une fois que le client a repéré et téléchargé les interfaces du service, il peut dialoguer et exécuter les méthodes proposées par le service.</p>
            </div>
        </div>
        <div class="chapter">
            <h2>
                3 -
                <i>Jini</i>
                Technology Starter Kit
            </h2>
            <p>
                La technologie
                <i>Jini</i>
                a fédérée une communauté active qui s’attelle à faire progresser les différents outils liés à son application. La communauté
                <i>Jini</i>
                publie des ressources à l’adresse
                <a href="http://www.jini.org">http://www.jini.org</a>
                et surtout son produit phare le
                <i>Jini(TM) Technology Starter Kit</i>
                .
            </p>
            <div class="subChapter">
                <h3>3.1 - Installation</h3>
                <p>
                    Le
                    <i>Jini(TM) Technology Starter Kit</i>
                    contient une implémentation de l’architecture
                    <i>Jini</i>
                    de
                    <i>Sun Microsystems</i>
                    . Actuellement, à l’écriture de cet article, en version 2.1 il est téléchargeable à l’adresse
                    <a href="http://starterkit.Jini.org/downloads/index.html">http://starterkit.Jini.org/downloads/index.html</a>
                    . Il s’agit d’un installeur qui installe différentes librairies utiles au développement, différents services déjà implémentés avec leurs sources, ainsi que les Javadocs de l’architecture
                    <i>Jini</i>
                    et des librairies du Starter Kit. La Communauté
                    <i>Jini</i>
                    apporte avec le Starter Kit les implémentations d’un certain nombre de services utiles pour créer un système
                    <i>Jini</i>
                    et qui ne seront pas à recoder. Les développeurs pourront se concentrer sur les services qu’ils veulent ajouter.
                </p>
            </div>
            <div class="subChapter">
                <h3>3.2 - Composants fournis</h3>
                <p>
                    Le starter Kit fournit une implémentation des principaux services nécessaires au fonctionnement du réseau et permet aux novices découvrant la technologie
                    <i>Jini</i>
                    de se concentrer sur le développement de services.
                </p>
                <p>Dans la version 2.1, utilisé dans cet article, on retrouve :</p>
                <p />
                <ul>
                    <li>
                        « reggie » une implémentation de
                        <i>Lookup Service</i>
                    </li>
                    <li>
                        « mahalo » une implémentation de
                        <i>Transaction manager Service</i>
                    </li>
                    <li>
                        « norm » une implémentation de
                        <i>Lease Renewal Service</i>
                    </li>
                    <li>
                        « mercury » une implémentation de
                        <i>Event Mailbox Service</i>
                    </li>
                    <li>
                        « fiddler » une implémentation de
                        <i>Lookup Discovery Service</i>
                    </li>
                    <li>
                        « outrigger » une implémentation de
                        <i>JavaSpaces(TM) Service</i>
                    </li>
                </ul>
                <p>La version 2.1 du starter kit fournit aussi des outils appartenant aux couches infrastructure et modèle de programmation augmentant la stabilité et les fonctionnalités du réseau.</p>
                <h4>3.2.1 - Modèle de programmation</h4>
                <p>Les nouveaux composants de la couche modèle de programmation sont :</p>
                <p />
                <ul>
                    <li>
                        Configuration : les développeurs de la communauté
                        <i>Jini</i>
                        ont développé cette API pour faciliter le paramétrage des applications. Une application est plus facile à déployer et à faire évoluer quand les paramètres sont exportés dans un fichier de configuration.
                    </li>
                    <li>Exporter : l’API Exporter donne une abstraction pour exporter des objets distants. Elle permet de changer les propriétés d’export sans avoir à modifier le code source du service.</li>
                    <li>
                        <i>ProxyPreparer</i>
                        : le
                        <i>ProxyPreparer</i>
                        est une API renforçant la sécurité en permettant aux clients de vérifier l’intégrité de la source qui envoie l’objet.
                    </li>
                </ul>
                <h4>3.2.2 - Infrastructure</h4>
                <p>Les apports des développeurs à la couche infrastructure sont orientés dans l’optique de renforcer la sécurité et l’intégrité des services.</p>
                <p>Les nouveaux composants de la couche infrastructure sont entre autres :</p>
                <p />
                <ul>
                    <li>Des composants pour la sécurité</li>
                    <li>Des composants pour gérer les contraintes d’invocation</li>
                    <li>
                        <i>Jini Extensible Remote Invocation</i>
                        (
                        <i>Jini ERI</i>
                        ), une implémentation de RMI supportant le transport des objets supportant les outils de sécurité.
                    </li>
                </ul>
            </div>
        </div>
        <div class="chapter">
            <h2>4 - Conclusion</h2>
            <p>
                Dans cet article, on a pu voir un aperçu de
                <i>Jini</i>
                , technologie permettant de créer un réseau facile à administrer, évolutif et distribué. Cette technologie conçue par
                <i>Sun</i>
                et améliorée par une communauté de développeurs est assez jeune mais possède un fort potentiel car elle répond au besoin de systèmes orienté service où chacun accède au service dont il a besoin à l’endroit où il veut au moment où il veut.
            </p>
            <p>
                Avec le développement d’internet et les nouvelles technologies, les systèmes
                <i>Jini</i>
                devraient prendre toutes leurs importances notamment dans le domaine de la domotique et des « maisons du futur ».
            </p>
        </div>
    </body>
</html>

